require('dotenv').config();
const mysql = require('mysql2/promise');
const TableAdapter = require('./table-adapter');

// 数据库连接配置 - 使用环境变量
const dbConfig = {
  host: process.env.DB_HOST || 'localhost',
  user: process.env.DB_USER || 'root',
  password: process.env.DB_PASSWORD || 'root',
  database: process.env.DB_NAME || 'community_service_platform',
  port: process.env.DB_PORT || 3306
};

// 服务器端口配置
const port = process.env.PORT || 3002;

async function testAndStart() {
  try {
    console.log('🚀 启动邻里互助平台后端服务...');
    console.log('🔍 正在测试数据库连接...');
    
    // 创建连接
    const connection = await mysql.createConnection(dbConfig);
    console.log('✅ 数据库连接成功！');
    
    // 初始化表适配器
    const tableAdapter = new TableAdapter();
    
    // 查看所有表
    const [tables] = await connection.execute('SHOW TABLES');
    console.log('\n📋 数据库中的表:');
    tables.forEach(table => {
      const tableName = Object.values(table)[0];
      console.log(`   - ${tableName}`);
    });
    
    // 检查services表（用于模拟闲置物品和技能数据）
    try {
      const [servicesData] = await connection.execute('SELECT * FROM services LIMIT 3');
      console.log(`\n✅ 找到services表，包含 ${servicesData.length} 条服务数据`);
      console.log('📊 服务数据示例:');
      servicesData.forEach((row, index) => {
        console.log(`   服务 ${index + 1}: ${row.service_name} - ${row.service_description}`);
      });
      
      // 检查服务分类
      const [categoriesData] = await connection.execute('SELECT * FROM service_categories');
      console.log(`\n📋 服务分类 (${categoriesData.length} 个):`);
      categoriesData.forEach(cat => {
        console.log(`   - ${cat.category_name}`);
      });
      
      // 创建模拟数据
      const mockData = await tableAdapter.createMockData(connection, 'services');
      if (mockData) {
        console.log('\n🎭 创建模拟数据:');
        console.log(`   闲置物品: ${mockData.idleItems.length} 条`);
        console.log(`   技能共享: ${mockData.skills.length} 条`);
      }
      
    } catch (error) {
      console.log(`⚠️ services表检查: ${error.message}`);
    }
    
    // 检查其他相关表
    try {
      const [usersData] = await connection.execute('SELECT COUNT(*) as count FROM users');
      console.log(`\n👥 用户表: ${usersData[0].count} 个用户`);
    } catch (error) {
      console.log(`⚠️ 用户表检查: ${error.message}`);
    }
    
    try {
      const [noticesData] = await connection.execute('SELECT COUNT(*) as count FROM community_notices');
      console.log(`📢 社区通知: ${noticesData[0].count} 条通知`);
    } catch (error) {
      console.log(`⚠️ 社区通知表检查: ${error.message}`);
    }
    
    await connection.end();
    
    console.log('\n🎉 数据库连接测试完成！');
    console.log('📝 如果看到表信息和示例数据，说明连接正常');
    console.log('🚀 现在可以启动服务器了');
    
    // 启动服务器
    console.log('\n正在启动API服务器...');
    require('./server.js');
    
  } catch (error) {
    console.error('❌ 连接失败:', error.message);
    console.error('\n请检查以下配置:');
    console.error('1. MySQL服务是否启动');
    console.error('2. 数据库连接信息是否正确');
    console.error('3. 数据库和表是否存在');
    console.error('\n当前配置:');
    console.error(`   主机: ${dbConfig.host}:${dbConfig.port}`);
    console.error(`   用户: ${dbConfig.user}`);
    console.error(`   数据库: ${dbConfig.database}`);
  }
}

// 运行测试和启动
testAndStart();